package com.pcl;

import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 2. Map 添加，删除、读取、遍历(5种）
 *
 * @author 潘春龙
 * @title: ProjectTwo
 * @projectName learn-git-testing
 * @description: TODO
 * @date 2022/2/17
 */
@Slf4j
public class ProjectTwo {
  /**
   * 初始化代码
   *
   * @return map
   */
  public static Map<String, String> initMaps() {
    Map<String, String> map = new HashMap<String, String>();
    map.put("张三", "男");
    map.put("王五", "男");
    map.put("赵六", "男");
    map.put("小昭", "女");
    map.put("美玲", "女");
    return map;
  }

  /**
   * 添加map集合
   *
   * @param keyItem
   * @param mapItem
   * @param valueItem
   * @return map
   */
  public static Map<String, String> addMaps(Map<String, String> mapItem, String keyItem, String valueItem) {
    mapItem.put(keyItem, valueItem);
    return mapItem;
  }


  /**
   * 删除map集合
   * @param mapItem
   * @param keyItem
   * @return map
   */
  public static Map<String, String> removeMaps(Map<String, String> mapItem, String keyItem) {
    mapItem.remove(keyItem);
    return mapItem;
  }

  /**
   * 遍历数组，第一种方式
   * @param mapItem
   * @return map
   */
  public static void itemOne(Map<String, String> mapItem) {
    for (Map.Entry<String, String> entry : mapItem.entrySet()) {
      log.info("Key = " + entry.getKey() + ", Value = " + entry.getValue());
    }
  }

  /**
   * 遍历数组，第二种方式
   * @param mapItem
   * @return map
   */
  public static void itemTwo(Map<String, String> mapItem) {

//      遍历map中的键
    for (String key : mapItem.keySet()) {
      log.info("Key = " + key);
    }
//        遍历map中的值
    for (String value : mapItem.values()) {
      log.info("Value = " + value);
    }
  }

  /**
   * 遍历数组，第三种方式
   * @param mapItem
   * @return map
   */
  public static void itemThree(Map<String, String> mapItem) {
    Iterator<Map.Entry<String, String>> entries = mapItem.entrySet().iterator();
    while (entries.hasNext()) {
      Map.Entry<String, String> entry = entries.next();
      log.info("Key = " + entry.getKey() + ", Value = " + entry.getValue());
    }
  }

  /**
   * 遍历数组，第四种方式
   * @param mapItem
   * @return map
   */
  public static void itemFour(Map<String, String> mapItem) {
    mapItem.forEach((key, value) -> {
      log.info(key + ":" + value);
    });
  }

  /**
   * 遍历数组，第五种方式
   * @param mapItem
   * @return map
   */
  public static void itemFive(Map<String, String> mapItem) {

    for (String key : mapItem.keySet()) {
      String value = mapItem.get(key);
      log.info("Key = " + key + ", Value = " + value);
    }
  }


  public static void main(String[] args) {
    /**
     * 初始化map集合
     * */
    Map<String, String> stringMap = initMaps();

    /**
     * 新增map集合
     * */
    Map<String, String> stringStringMap = addMaps(stringMap, "阿宝", "男");
    /**
     * 删除map集合
     * */
    Map<String, String> removeMaps = removeMaps(stringMap, "张三");

    /**
     * 遍历数组集合，方式一
     * */
    itemOne(stringMap);

    /**
     * 遍历数组集合，方式二
     * */
    itemTwo(stringMap);

    /**
     * 遍历数组集合，方式三
     * */
    itemThree(stringMap);

    /**
     * 遍历数组集合，方式四
     * */
    itemFour(stringMap);

    /**
     * 遍历数组集合，方式五
     * */
    itemFive(stringMap);
  }
}
